package cn.dapeng.linked;

import cn.dapeng.utils.LinkedCreator;

/**
 * @BelongProject study
 * @BelongPackage cn.dapeng.linked
 * @Description 两个链表节点相加，返回一个新链表
 * @ClassName AddTwoLinkedNode
 * @Author xupenghong
 * @Date 2024/9/3 15:21
 * @Version 1.0.0
 */
public class AddTwoLinkedNode {

    /**
     * 思路：先判断两个链表的长度，最后返回长度最长的那个链表的引用
     * 遍历短的链表，遍历完了  也就相加完了
     * @param h1
     * @param h2
     * @return 这个合并是不考虑进位的
     */
    public static LinkedNode addTwoLinkedNode(LinkedNode h1, LinkedNode h2) {
        if (h1 == null && h2 == null) {
            return null;
        }

        if (h1 == null) {
            return h2;
        }

        if (h2 == null) {
            return h1;
        }

        int h1L = LinkedCreator.getLength(h1);
        int h2L = LinkedCreator.getLength(h2);


        LinkedNode head = h1L > h2L ? h1 : h2;
        LinkedNode shortNode = head == h1 ? h2 : h1;

        LinkedNode next = head;
        while (shortNode != null) {
            next.value += shortNode.value;
            next = next.next;
            shortNode = shortNode.next;
        }

        return head;
    }

    public static void main(String[] args) {
        LinkedNode h1 = LinkedCreator.createAscLinked(100, 10);
        LinkedNode h2 = LinkedCreator.createAscLinked(100, 10);
        LinkedCreator.print(h1);
        LinkedCreator.print(h2);

        LinkedNode head = addTwoLinkedNode(h1, h2);
        LinkedCreator.print(head);
    }
}
